//testbench
`timescale  1ns / 1ps                //   时间单位/时间精度

module testbench_demo;               

parameter PERIOD  = 10;              //常量PERIOD 

// inputs
reg clk=0;                 //时钟信号
reg rst_n=0;               //复位信号
reg [3:0] i_data;          //四位
reg [3:0] q_data;          //四位
reg ready_in=0;
reg [1:0] sel=0;           //两位        //以上为 输入寄存器

// outputs
wire [4:0] out_data;       //五位
wire ready_out;            //以上为线网型输出

// generate clk
initial                   
begin
    forever #(PERIOD/2)  clk=~clk;  //frequency？    //无限循环
end

//generate inputs
initial
begin
    #(PERIOD*2) rst_n = 1;     //延迟二十个单位时间 给rst_n赋值为1
    #200                       //延迟200个单位时间
    i_data = 4'd5;             //给i_data阻塞赋值四位十进制5
    q_data = 4'ha;             //给q_data阻塞赋值四位十六进制a
    #100                       //延迟100个单位时间
    ready_in = 1;              //给ready_in阻塞赋值1
    sel = 2'b10;               //给sel阻塞赋值2位2进制10
end

//例化
demo u_demo(          //模块名  被例化的模块名
    .clk(clk),          //端口一一对应
    .rst_n(rst_n),
    .i_data(i_data),
    .q_data(q_data),
    .ready_in(ready_in),
    .sel(sel),
    .out_data(out_data),
    .ready_out(ready_out)
);

endmodule